home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / dynduke.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  16KB  |  445 lines

  1. /***************************************************************************
  2.  
  3.     Dynamite Duke                        (c) 1989 Seibu Kaihatsu/Fabtek
  4.     The Double Dynamites                (c) 1989 Seibu Kaihatsu/Fabtek
  5.  
  6.  
  7.     To access test mode, reset with both start buttons held.
  8.  
  9.     Coins are controlled by the sound cpu, and the sound cpu is encrypted!
  10.     You need to play with sound off at the moment to coin up.
  11.  
  12.     The background layer is 5bpp and I'm not 100% sure the colours are
  13.     correct on it, although the layer is 5bpp the palette data is 4bpp.
  14.     My current implementation looks pretty good though I've never seen
  15.     the real game.
  16.  
  17.     There is a country code byte in the program to select between
  18.     Seibu Kaihatsu/Fabtek/Taito licenses.
  19.  
  20.     Emulation by Bryan McPhail, mish@tendril.co.uk
  21.  
  22. ***************************************************************************/
  23.  
  24. #include "driver.h"
  25. #include "vidhrdw/generic.h"
  26. #include "cpu/z80/z80.h"
  27. #include "sndhrdw/seibu.h"
  28.  
  29. READ_HANDLER( dynduke_background_r );
  30. READ_HANDLER( dynduke_foreground_r );
  31. WRITE_HANDLER( dynduke_background_w );
  32. WRITE_HANDLER( dynduke_foreground_w );
  33. WRITE_HANDLER( dynduke_text_w );
  34. WRITE_HANDLER( dynduke_gfxbank_w );
  35. int dynduke_vh_start(void);
  36. WRITE_HANDLER( dynduke_control_w );
  37. void dynduke_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  38. WRITE_HANDLER( dynduke_paletteram_w );
  39.  
  40. static unsigned char *dynduke_shared_ram;
  41. extern unsigned char *dynduke_back_data,*dynduke_fore_data,*dynduke_scroll_ram,*dynduke_control_ram;
  42.  
  43. /***************************************************************************/
  44.  
  45. static READ_HANDLER( dynduke_shared_r ) { return dynduke_shared_ram[offset]; }
  46. static WRITE_HANDLER( dynduke_shared_w ) { dynduke_shared_ram[offset]=data; }
  47.  
  48. static READ_HANDLER( dynduke_soundcpu_r )
  49. {
  50.     int erg,orig;
  51.     orig=seibu_shared_sound_ram[offset];
  52.  
  53.     /* Small kludge to allows coins with sound off */
  54.     if (offset==4 && (!Machine->sample_rate) && (readinputport(4)&1)==1) return 1;
  55.  
  56.     switch (offset)
  57.     {
  58.         case 0x04:{erg=seibu_shared_sound_ram[6];seibu_shared_sound_ram[6]=0;break;} /* just 1 time */
  59.         case 0x06:{erg=0xa0;break;}
  60.         case 0x0a:{erg=0;break;}
  61.         default: erg=seibu_shared_sound_ram[offset];
  62.     }
  63.     return erg;
  64. }
  65.  
  66. /******************************************************************************/
  67.  
  68. static struct MemoryReadAddress readmem[] =
  69. {
  70.     { 0x00000, 0x07fff, MRA_RAM },
  71.     { 0x0a000, 0x0afff, dynduke_shared_r },
  72.     { 0x0b000, 0x0b000, input_port_0_r },
  73.     { 0x0b001, 0x0b001, input_port_1_r },
  74.     { 0x0b002, 0x0b002, input_port_2_r },
  75.     { 0x0b003, 0x0b003, input_port_3_r },
  76.     { 0x0d000, 0x0d00f, dynduke_soundcpu_r },
  77.     { 0xa0000, 0xfffff, MRA_ROM },
  78.     { -1 }    /* end of table */
  79. };
  80.  
  81. static struct MemoryWriteAddress writemem[] =
  82. {
  83.     { 0x00000, 0x06fff, MWA_RAM },
  84.     { 0x07000, 0x07fff, MWA_RAM, &spriteram, &spriteram_size },
  85.     { 0x08000, 0x080ff, MWA_RAM, &dynduke_scroll_ram },
  86.     { 0x0a000, 0x0afff, dynduke_shared_w, &dynduke_shared_ram },
  87.     { 0x0b000, 0x0b007, dynduke_control_w, &dynduke_control_ram },
  88.     { 0x0c000, 0x0c7ff, dynduke_text_w, &videoram },
  89.     { 0x0d000, 0x0d00f, seibu_soundlatch_w, &seibu_shared_sound_ram },
  90.     { 0xa0000, 0xfffff, MWA_ROM },
  91.     { -1 }    /* end of table */
  92. };
  93.  
  94. static struct MemoryReadAddress sub_readmem[] =
  95. {
  96.     { 0x00000, 0x05fff, MRA_RAM },
  97.     { 0x06000, 0x067ff, dynduke_background_r },
  98.     { 0x06800, 0x06fff, dynduke_foreground_r },
  99.     { 0x07000, 0x07fff, paletteram_r },
  100.     { 0x08000, 0x08fff, dynduke_shared_r },
  101.     { 0xc0000, 0xfffff, MRA_ROM },
  102.     { -1 }    /* end of table */
  103. };
  104.  
  105. static struct MemoryWriteAddress sub_writemem[] =
  106. {
  107.     { 0x00000, 0x05fff, MWA_RAM },
  108.     { 0x06000, 0x067ff, dynduke_background_w, &dynduke_back_data },
  109.     { 0x06800, 0x06fff, dynduke_foreground_w, &dynduke_fore_data },
  110.     { 0x07000, 0x07fff, dynduke_paletteram_w, &paletteram },
  111.     { 0x08000, 0x08fff, dynduke_shared_w },
  112.     { 0x0a000, 0x0a001, dynduke_gfxbank_w },
  113.     { 0x0c000, 0x0c001, MWA_NOP },
  114.     { 0xc0000, 0xfffff, MWA_ROM },
  115.     { -1 }    /* end of table */
  116. };
  117.  
  118. /******************************************************************************/
  119.  
  120. #if 0
  121. SEIBU_SOUND_SYSTEM_YM3812_MEMORY_MAP(input_port_4_r); /* Coin port */
  122. #endif
  123.  
  124. /******************************************************************************/
  125.  
  126. INPUT_PORTS_START( dynduke )
  127.     PORT_START    /* IN0 */
  128.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER1 )
  129.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER1 )
  130.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER1 )
  131.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
  132.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
  133.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
  134.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
  135.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
  136.  
  137.     PORT_START    /* IN1 */
  138.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
  139.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
  140.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
  141.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
  142.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  143.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  144.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
  145.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
  146.  
  147.     PORT_START    /* Dip switch A */
  148.     PORT_DIPNAME( 0x07, 0x06, DEF_STR( Coin_A ) )
  149.     PORT_DIPSETTING(    0x00, DEF_STR( 5C_1C ) )
  150.     PORT_DIPSETTING(    0x02, DEF_STR( 3C_1C ) )
  151.     PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
  152.     PORT_DIPSETTING(    0x06, DEF_STR( 1C_1C ) )
  153.     PORT_DIPNAME( 0x18, 0x08, DEF_STR( Coin_B ) )
  154.     PORT_DIPSETTING(    0x18, DEF_STR( 1C_2C ) )
  155.     PORT_DIPSETTING(    0x10, DEF_STR( 1C_3C ) )
  156.     PORT_DIPSETTING(    0x08, DEF_STR( 1C_5C ) )
  157.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C ) )
  158.     PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
  159.     PORT_DIPNAME( 0x20, 0x20, "Starting Coin" )
  160.     PORT_DIPSETTING(    0x20, "normal" )
  161.     PORT_DIPSETTING(    0x00, "X 2" )
  162.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
  163.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  164.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  165.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
  166.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  167.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  168.  
  169.     PORT_START    /* Dip switch B */
  170.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
  171.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  172.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  173.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
  174.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  175.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  176.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  177.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  178.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  179.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  180.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  181.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  182.     PORT_DIPNAME( 0x30, 0x30, "Difficulty?" )
  183.     PORT_DIPSETTING(    0x30, "Normal" )
  184.     PORT_DIPSETTING(    0x20, "Easy" )
  185.     PORT_DIPSETTING(    0x10, "Hard" )
  186.     PORT_DIPSETTING(    0x00, "Very Hard" )
  187.     PORT_DIPNAME( 0x40, 0x40, "Continue?" )
  188.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  189.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  190.     PORT_DIPNAME( 0x80, 0x00, "Demo Sound?" )
  191.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  192.     PORT_DIPSETTING(    0x80, DEF_STR( On ) )
  193.  
  194.     PORT_START    /* Coins */
  195.     PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_HIGH, IPT_COIN1, 1 )
  196.     PORT_BIT_IMPULSE( 0x02, IP_ACTIVE_HIGH, IPT_COIN2, 1 )
  197. INPUT_PORTS_END
  198.  
  199. /******************************************************************************/
  200.  
  201. static struct GfxLayout charlayout =
  202. {
  203.     8,8,        /* 8*8 characters */
  204.     1024,
  205.     4,            /* 4 bits per pixel */
  206.     { 4,0,(0x10000*8)+4,0x10000*8 },
  207.     { 0,1,2,3,8,9,10,11 },
  208.     { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
  209.     128
  210. };
  211.  
  212. static struct GfxLayout spritelayout =
  213. {
  214.   16,16,    /* 16*16 tiles */
  215.   0x4000,
  216.   4,        /* 4 bits per pixel */
  217.   { 12, 8, 4, 0 },
  218.   {
  219.     0,1,2,3, 16,17,18,19,
  220.     512+0,512+1,512+2,512+3,
  221.     512+8+8,512+9+8,512+10+8,512+11+8,
  222.   },
  223.   {
  224.     0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
  225.     8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32,
  226.   },
  227.   1024
  228. };
  229.  
  230. static struct GfxLayout bg_layout =
  231. {
  232.     16,16,
  233.     0x2000,
  234.     5,
  235.     { 0x100000*8+4, 0x80000*8+4,0x80000*8,4,0 },
  236.     {
  237.         0,1,2,3,8,9,10,11,
  238.         256+0,256+1,256+2,256+3,256+8,256+9,256+10,256+11
  239.     },
  240.     {
  241.         0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16,
  242.         8*16,9*16,10*16,11*16,12*16,13*16,14*16,15*16
  243.     },
  244.     512
  245. };
  246.  
  247. static struct GfxLayout fg_layout =
  248. {
  249.     16,16,
  250.     0x2000,
  251.     4,
  252.     { 0x80000*8+4, 0x80000*8, 4, 0 },
  253.     {
  254.         0,1,2,3,8,9,10,11,
  255.         256+0,256+1,256+2,256+3,256+8,256+9,256+10,256+11
  256.     },
  257.     {
  258.         0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16,
  259.         8*16,9*16,10*16,11*16,12*16,13*16,14*16,15*16
  260.     },
  261.     512
  262. };
  263.  
  264. static struct GfxDecodeInfo dynduke_gfxdecodeinfo[] =
  265. {
  266.     { REGION_GFX1, 0, &charlayout,   1280, 16 },
  267.     { REGION_GFX2, 0, &bg_layout,    2048, 32 }, /* Really 0 */
  268.     { REGION_GFX3, 0, &fg_layout,     512, 16 },
  269.     { REGION_GFX4, 0, &spritelayout,  768, 32 },
  270.     { -1 } /* end of array */
  271. };
  272.  
  273. /******************************************************************************/
  274.  
  275. /* Parameters: YM3812 frequency, Oki frequency, Oki memory region */
  276. SEIBU_SOUND_SYSTEM_YM3812_HARDWARE(14318180/4,8000,REGION_SOUND1);
  277.  
  278. static int dynduke_interrupt(void)
  279. {
  280.     return 0xc8/4;    /* VBL */
  281. }
  282.  
  283. static void dynduke_eof_callback(void)
  284. {
  285.     buffer_spriteram_w(0,0); /* Could be a memory location instead */
  286. }
  287.  
  288. static struct MachineDriver machine_driver_dynduke =
  289. {
  290.     /* basic machine hardware */
  291.     {
  292.         {
  293.             CPU_V30, /* NEC V30-8 CPU */
  294.             16000000, /* Guess */
  295.             readmem,writemem,0,0,
  296.             dynduke_interrupt,1
  297.         },
  298.         {
  299.             CPU_V30, /* NEC V30-8 CPU */
  300.             16000000, /* Guess */
  301.             sub_readmem,sub_writemem,0,0,
  302.             dynduke_interrupt,1
  303.         },
  304. #if 0
  305.         {
  306.             SEIBU_SOUND_SYSTEM_CPU(14318180/4)
  307.         }
  308. #endif
  309.     },
  310.     60, DEFAULT_REAL_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  311.     60,    /* CPU interleave  */
  312.     0,//seibu_sound_init_2,
  313.  
  314.     /* video hardware */
  315.     32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
  316.  
  317.     dynduke_gfxdecodeinfo,
  318.     2048+1024, 2048+1024,
  319.     0,
  320.  
  321.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE | VIDEO_BUFFERS_SPRITERAM,
  322.     dynduke_eof_callback,
  323.     dynduke_vh_start,
  324.     0,
  325.     dynduke_vh_screenrefresh,
  326.  
  327.     /* sound hardware */
  328.     0,0,0,0,
  329.     {
  330.         SEIBU_SOUND_SYSTEM_YM3812_INTERFACE
  331.     }
  332. };
  333.  
  334. /***************************************************************************/
  335.  
  336. ROM_START( dynduke )
  337.     ROM_REGION( 0x100000, REGION_CPU1 ) /* v30 main cpu */
  338.     ROM_LOAD_V20_ODD ("dd1.cd8",   0x0a0000, 0x10000, 0xa5e2a95a )
  339.     ROM_LOAD_V20_EVEN("dd2.cd7",   0x0a0000, 0x10000, 0x7e51af22 )
  340.     ROM_LOAD_V20_ODD ("dd3.ef8",   0x0c0000, 0x20000, 0xa56f8692 )
  341.     ROM_LOAD_V20_EVEN("dd4.ef7",   0x0c0000, 0x20000, 0xee4b87b3 )
  342.  
  343.     ROM_REGION( 0x100000, REGION_CPU2 ) /* v30 sub cpu */
  344.     ROM_LOAD_V20_ODD ("dd5.p8",  0x0e0000, 0x10000, 0x883d319c )
  345.     ROM_LOAD_V20_EVEN("dd6.p7",  0x0e0000, 0x10000, 0xd94cb4ff )
  346.  
  347.     ROM_REGION( 0x18000, REGION_CPU3 ) /* sound Z80 */
  348.     ROM_LOAD( "dd8.w8", 0x000000, 0x08000, 0x3c29480b )
  349.     ROM_CONTINUE(       0x010000, 0x08000 )
  350.  
  351.     ROM_REGION( 0x020000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  352.     ROM_LOAD( "dd9.jk5",    0x000000, 0x04000, 0xf2bc9af4 ) /* chars */
  353.     ROM_LOAD( "dd10.jk3",    0x010000, 0x04000, 0xc2a9f19b )
  354.  
  355.     ROM_REGION( 0x180000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  356.     ROM_LOAD( "dd.a2",        0x000000, 0x40000, 0x598f343f ) /* background */
  357.     ROM_LOAD( "dd.b2",        0x040000, 0x40000, 0x41a9088d )
  358.     ROM_LOAD( "dd.c2",        0x080000, 0x40000, 0xcc341b42 )
  359.     ROM_LOAD( "dd.d2",        0x0c0000, 0x40000, 0x4752b4d7 )
  360.     ROM_LOAD( "dd.de3",        0x100000, 0x40000, 0x44a4cb62 )
  361.     ROM_LOAD( "dd.ef3",        0x140000, 0x40000, 0xaa8aee1a )
  362.  
  363.     ROM_REGION( 0x100000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  364.     ROM_LOAD( "dd.mn3",        0x000000, 0x40000, 0x2ee0ca98 ) /* foreground */
  365.     ROM_LOAD( "dd.mn4",        0x040000, 0x40000, 0x6c71e2df )
  366.     ROM_LOAD( "dd.n45",        0x080000, 0x40000, 0x85d918e1 )
  367.     ROM_LOAD( "dd.mn5",        0x0c0000, 0x40000, 0xe71e34df )
  368.  
  369.     ROM_REGION( 0x200000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  370.     ROM_LOAD_GFX_EVEN(  "dd.n1", 0x000000, 0x40000, 0xcf1db927 ) /* sprites */
  371.     ROM_LOAD_GFX_ODD (  "dd.n2", 0x000000, 0x40000, 0x5328150f )
  372.     ROM_LOAD_GFX_EVEN(  "dd.m1", 0x080000, 0x40000, 0x80776452 )
  373.     ROM_LOAD_GFX_ODD (  "dd.m2", 0x080000, 0x40000, 0xff61a573 )
  374.     ROM_LOAD_GFX_EVEN(  "dd.e1", 0x100000, 0x40000, 0x84a0b87c )
  375.     ROM_LOAD_GFX_ODD (  "dd.e2", 0x100000, 0x40000, 0xa9585df2 )
  376.     ROM_LOAD_GFX_EVEN(  "dd.f1", 0x180000, 0x40000, 0x9aed24ba )
  377.     ROM_LOAD_GFX_ODD (  "dd.f2", 0x180000, 0x40000, 0x3eb5783f )
  378.  
  379.     ROM_REGION( 0x10000, REGION_SOUND1 )    /* ADPCM samples */
  380.     ROM_LOAD( "dd7.x10", 0x000000, 0x10000, 0x9cbc7b41 )
  381. ROM_END
  382.  
  383. ROM_START( dbldyn )
  384.     ROM_REGION( 0x100000, REGION_CPU1 ) /* v30 main cpu */
  385.     ROM_LOAD_V20_ODD ("dd1.cd8", 0x0a0000, 0x10000, 0xa5e2a95a )
  386.     ROM_LOAD_V20_EVEN("dd2.cd7", 0x0a0000, 0x10000, 0x7e51af22 )
  387.     ROM_LOAD_V20_ODD ("3.8e",    0x0c0000, 0x20000, 0x9b785028 )
  388.     ROM_LOAD_V20_EVEN("4.7e",    0x0c0000, 0x20000, 0x0d0f6350 )
  389.  
  390.     ROM_REGION( 0x100000, REGION_CPU2 ) /* v30 sub cpu */
  391.     ROM_LOAD_V20_ODD ("5.8p",  0x0e0000, 0x10000, 0xea56d719 )
  392.     ROM_LOAD_V20_EVEN("6.7p",  0x0e0000, 0x10000, 0x9ffa0ecd )
  393.  
  394.     ROM_REGION( 0x18000, REGION_CPU3 ) /* sound Z80 */
  395.     ROM_LOAD( "8.8w", 0x000000, 0x08000, 0xf4066081 )
  396.     ROM_CONTINUE(     0x010000, 0x08000 )
  397.  
  398.     ROM_REGION( 0x020000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  399.     ROM_LOAD( "9.5k",        0x004000, 0x4000, 0x16bec703 ) /* chars */
  400.     ROM_CONTINUE(           0x000000, 0x4000 )
  401.     ROM_CONTINUE(           0x008000, 0x8000 )
  402.     ROM_LOAD( "10.4k",        0x014000, 0x4000, 0x719f909d )
  403.     ROM_CONTINUE(           0x010000, 0x4000 )
  404.     ROM_CONTINUE(           0x008000, 0x8000 )
  405.  
  406.     ROM_REGION( 0x180000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  407.     ROM_LOAD( "dd.a2",        0x000000, 0x40000, 0x598f343f ) /* background */
  408.     ROM_LOAD( "dd.b2",        0x040000, 0x40000, 0x41a9088d )
  409.     ROM_LOAD( "dd.c2",        0x080000, 0x40000, 0xcc341b42 )
  410.     ROM_LOAD( "dd.d2",        0x0c0000, 0x40000, 0x4752b4d7 )
  411.     ROM_LOAD( "dd.de3",        0x100000, 0x40000, 0x44a4cb62 )
  412.     ROM_LOAD( "dd.ef3",        0x140000, 0x40000, 0xaa8aee1a )
  413.  
  414.     ROM_REGION( 0x100000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  415.     ROM_LOAD( "dd.mn3",        0x000000, 0x40000, 0x2ee0ca98 ) /* foreground */
  416.     ROM_LOAD( "dd.mn4",        0x040000, 0x40000, 0x6c71e2df )
  417.     ROM_LOAD( "dd.n45",        0x080000, 0x40000, 0x85d918e1 )
  418.     ROM_LOAD( "dd.mn5",        0x0c0000, 0x40000, 0xe71e34df )
  419.  
  420.     ROM_REGION( 0x200000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  421.     ROM_LOAD_GFX_EVEN(  "dd.n1", 0x000000, 0x40000, 0xcf1db927 ) /* sprites */
  422.     ROM_LOAD_GFX_ODD (  "dd.n2", 0x000000, 0x40000, 0x5328150f )
  423.     ROM_LOAD_GFX_EVEN(  "dd.m1", 0x080000, 0x40000, 0x80776452 )
  424.     ROM_LOAD_GFX_ODD (  "dd.m2", 0x080000, 0x40000, 0xff61a573 )
  425.     ROM_LOAD_GFX_EVEN(  "dd.e1", 0x100000, 0x40000, 0x84a0b87c )
  426.     ROM_LOAD_GFX_ODD (  "dd.e2", 0x100000, 0x40000, 0xa9585df2 )
  427.     ROM_LOAD_GFX_EVEN(  "dd.f1", 0x180000, 0x40000, 0x9aed24ba )
  428.     ROM_LOAD_GFX_ODD (  "dd.f2", 0x180000, 0x40000, 0x3eb5783f )
  429.  
  430.     ROM_REGION( 0x10000, REGION_SOUND1 )    /* ADPCM samples */
  431.     ROM_LOAD( "dd7.x10", 0x000000, 0x10000, 0x9cbc7b41 )
  432. ROM_END
  433.  
  434. /***************************************************************************/
  435.  
  436.  
  437. static void init_dynduke(void)
  438. {
  439.     seibu_sound_decrypt();
  440. }
  441.  
  442.  
  443. GAMEX( 1989, dynduke, 0,       dynduke, dynduke, dynduke, ROT0, "Seibu Kaihatsu (Fabtek license)", "Dynamite Duke", GAME_NO_SOUND )
  444. GAMEX( 1989, dbldyn,  dynduke, dynduke, dynduke, dynduke, ROT0, "Seibu Kaihatsu (Fabtek license)", "The Double Dynamites", GAME_NO_SOUND )
  445.